﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BBMS.DLL.Base;
using System.Diagnostics;
using BBMS.FrontEnd.Constant;

namespace BBMS.DLL.Forms
{
    public partial class frmRestore : Form
    {
        private String databaseName = "";
//         public new static readonly string FunctionKey = "KhoiPhucDuLieu";
        protected static string GetFunctionKey() { return "KhoiPhucDuLieu"; }
        public frmRestore()
        {
            InitializeComponent();
            InitConfig();
        }

        private void InitConfig()
        {
            chkRestoreType.Items.Clear();
            chkRestoreType.Items.Add(new KeyValuePair(".dmp", "File dump"));
            chkRestoreType.Items.Add(new KeyValuePair(".sql", "File sql"));
            chkRestoreType.SelectedIndex = 0;

            chkEncodingType.Items.Clear();
            chkEncodingType.Items.Add(new KeyValuePair("Unicode", "Unicode"));
            chkEncodingType.Items.Add(new KeyValuePair("UTF-8", "UTF-8"));
            chkEncodingType.SelectedIndex = 0;

            if (System.Configuration.ConfigurationSettings.AppSettings["MySQLPath"] != null)
                txtMySQLPath.Text = System.Configuration.ConfigurationSettings.AppSettings["MySQLPath"].ToString();
            if (System.Configuration.ConfigurationSettings.AppSettings["host"] != null)
                txtHost.Text = System.Configuration.ConfigurationSettings.AppSettings["host"].ToString();
            if (System.Configuration.ConfigurationSettings.AppSettings["uid"] != null)
                txtUid.Text = System.Configuration.ConfigurationSettings.AppSettings["uid"].ToString();
         //   if (System.Configuration.ConfigurationSettings.AppSettings["pwd"] != null)
           //     txtPwd.Text = System.Configuration.ConfigurationSettings.AppSettings["pwd"].ToString();
            if (System.Configuration.ConfigurationSettings.AppSettings["database"] != null)
                databaseName = System.Configuration.ConfigurationSettings.AppSettings["database"].ToString();

        }

        private void btnBrowse1_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenDialog1 = new OpenFileDialog();
            //Tạo bộ lọc các file khi mở OpenDialog
            //Filter lọc ra các file để bạn dễ dàng lựa chọn (ví dụ các fiel MP3, hay WMA,....)
            OpenDialog1.Filter = "Dump File|*.dmp|SQL File|*.sql";
            //Tên của hộp thoại hiện lên - Không có thì sẽ là mặc định
            OpenDialog1.Title = "Chọn file restore";
            OpenDialog1.InitialDirectory = @"C:\";
            //Cho phép chọn nhiều file cùng lúc - Mặc định là false
            OpenDialog1.Multiselect = false;
            //Mở hộp thoại
            DialogResult dr = OpenDialog1.ShowDialog();

            //String excelFile = "";
            //excelFile = OpenDialog1.FileName;
            if (dr == DialogResult.OK)
            {
                txtFileName.Text = OpenDialog1.FileName;
            }
        }

        private void btnRestore_Click(object sender, EventArgs e)
        {
            if (txtFileName.Text.Trim() == "")
            {
                MessageBox.Show(null, DialogMessage.frmRestoreInputRestoreFileName, DialogMessage.frmRestoreWarning);
                txtFileName.Focus();
                return;
            }

            if (txtMySQLPath.Text.Trim() == "")
            {
                MessageBox.Show(null, DialogMessage.frmRestoreInputMySQLPath, DialogMessage.frmRestoreWarning);
                txtMySQLPath.Focus();
                return;
            }

            if (txtHost.Text.Trim() == "")
            {
                MessageBox.Show(null, DialogMessage.frmRestoreInputHost, DialogMessage.frmRestoreWarning);
                txtHost.Focus();
                return;
            }

            if (txtUid.Text.Trim() == "")
            {
                MessageBox.Show(null, DialogMessage.frmRestoreInputUsername, DialogMessage.frmRestoreWarning);
                txtUid.Focus();
                return;
            }

            if (MessageBox.Show(DialogMessage.frmRestoreRestoreConfirm, DialogMessage.frmRestoreWarning, MessageBoxButtons.YesNo,MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                String result = "";
                result = RestoreMySQLDatabase(databaseName, txtMySQLPath.Text.Trim(), txtUid.Text.Trim(), txtPwd.Text.Trim(), txtHost.Text.Trim(), txtFileName.Text.Trim());
                if (result == "")
                {
                    MessageBox.Show(DialogMessage.frmRestoreRestoreSuccess, DialogMessage.frmRestoreWarning);
                }
                else
                {
                    MessageBox.Show(result, DialogMessage.frmRestoreInformation);
                }
            }

            
        }

        private void btnBrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenDialog1 = new OpenFileDialog();
            //Tạo bộ lọc các file khi mở OpenDialog
            //Filter lọc ra các file để bạn dễ dàng lựa chọn (ví dụ các fiel MP3, hay WMA,....)
            OpenDialog1.Filter = "Application|*.exe";
            //Tên của hộp thoại hiện lên - Không có thì sẽ là mặc định
            OpenDialog1.Title = "Đường dẫn chương trình khôi phục dữ liệu";
            OpenDialog1.InitialDirectory = @"C:\";
            //Cho phép chọn nhiều file cùng lúc - Mặc định là false
            OpenDialog1.Multiselect = false;
            //Mở hộp thoại
            DialogResult dr = OpenDialog1.ShowDialog();

            //String excelFile = "";
            //excelFile = OpenDialog1.FileName;
            if (dr == DialogResult.OK)
            {
                txtMySQLPath.Text = OpenDialog1.FileName;
            }
        }

        private void btnOpenSource_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenDialog1 = new OpenFileDialog();
            //Tạo bộ lọc các file khi mở OpenDialog
            //Filter lọc ra các file để bạn dễ dàng lựa chọn (ví dụ các fiel MP3, hay WMA,....)
            OpenDialog1.Filter = "Dump File|*.dmp|SQL File|*.sql";
            //Tên của hộp thoại hiện lên - Không có thì sẽ là mặc định
            OpenDialog1.Title = "Chọn file restore";
            OpenDialog1.InitialDirectory = @"C:\";
            //Cho phép chọn nhiều file cùng lúc - Mặc định là false
            OpenDialog1.Multiselect = false;
            //Mở hộp thoại
            DialogResult dr = OpenDialog1.ShowDialog();

            //String excelFile = "";
            //excelFile = OpenDialog1.FileName;
            if (dr == DialogResult.OK)
            {
                txtFileName.Text = OpenDialog1.FileName;
            }
        }

        public string RestoreMySQLDatabase(string databasename, string mysqlPath, string username, string password, string host, string inputFile)
        {
            try
            {
                ProcessStartInfo ProcessInfo;
                Process Process;
                ProcessInfo = new ProcessStartInfo("cmd.exe", "/C \"" + mysqlPath + "\" -u " + username + " -h " + host + " --password=" + password + " " + databasename + " < " + inputFile);
                //ProcessInfo = new ProcessStartInfo("cmd.exe", "/C " + mysqlPath + " -u " + username + " -h " + host + " -p " + password + " " + databasename + " < " + inputFile);
                ProcessInfo.CreateNoWindow = true;
                ProcessInfo.UseShellExecute = false;
                ProcessInfo.RedirectStandardOutput = true;
                ProcessInfo.RedirectStandardError = true;                 
                Process = Process.Start(ProcessInfo);
                string output = Process.StandardError.ReadToEnd();
                
                Process.WaitForExit(20000);
                Process.Close();
                return output;
            }
            catch
            {
                return "Lỗi restore CSDL!";
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
